package com.ego.item.service;

import com.ego.common.pojo.PageResult;
import com.ego.item.bo.SpuBo;
import com.ego.item.pojo.Sku;
import com.ego.item.pojo.SpuDetail;

import java.util.List;
import java.util.Map;

public interface GoodsService {

    /**
     * 分页
     * @param key 过滤条件
     * @param saleable 上架或下架
     * @param page 当前页
     * @param rows 每页大小
     * @return 分页数据
     */
    PageResult<SpuBo> page(String key, Boolean saleable, Integer page, Integer rows);

    /**
     * 新增
     * @param spuBo 对象
     */
    void save(SpuBo spuBo);

    /**
     * 根据id查询
     * @param id spuId
     * @return SpuDetail
     */
    SpuDetail querySpuDetailById(Integer id);

    /**
     * 根据id查询
     * @param spuId spuId
     * @return Sku集合
     */
    List<Sku> querySkuBySpuId(Long spuId);

    /**
     * 修改
     * @param spuBo 对象
     */
    void update(SpuBo spuBo);

    /**
     * 删除
     * @param id id
     */
    void delete(Integer id);

    /**
     * 分页查询
     * @param pageNo pageNo
     * @param size size
     * @return
     */
    PageResult<SpuBo> pageForES(Integer pageNo, Integer size);

    /**
     * 根据id查询
     * @param id id
     * @return SpuBo
     */
    SpuBo queryGoodsById(Long id);

    /**
     * 根据id查sku
     * @param skuId skuId
     * @return sku
     */
    Sku findSkuBySkuId(Long skuId);

    /**
     * 根据skuIdList查询skuList
     * @param skuIdList skuIdList
     * @return skuList
     */
    List<Sku> findSkuListBySkuIdList(List<Long> skuIdList);

    /**
     * 减库存
     * @param list list
     * @return boolean
     */
    Boolean reduceStock(List<Map<Object, Object>> list);
}
